// 该程序中地父进程向管道中写入一个字符串，然后子进程读取这个字符串。
// 该程序没有检查I/O错误
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>

#define BUFSIZE 10

void parentWritePipe() {
	char bufin[BUFSIZE] = "empty";
	char bufout[] = "hello";
	int bytesin;
	pid_t childpid;
	int fd[2];			// 该描述符用来创建pipe管道

	// 使用pipe创建管道
	if (pipe(fd) == -1) {
		perror("Failed to create the pipe");
		return;
	}

	bytesin = strlen(bufin);
	
	// 创建子进程
	childpid = fork();
	if (childpid == -1){
		perror("Failed to fork");
		return;
	}


	if (childpid) {		// 父进程函数, 父进程向管道中写入一个hello字符串
		write(fd[1], bufout, strlen(bufout));
	} else {			// 子进程函数, 子进程从管道中读取一个字符串
		bytesin = read(fd[0], bufin, BUFSIZE);
	}

	fprintf(stderr, "[%ld]:my bufin is {%.*s}, my bufout is {%s}\n", 
			(long)getpid(), bytesin, bufin, bufout);
}

int main(void) {
	
	parentWritePipe();
	return 0;
}
